package j2024.j202412;

import java.util.ArrayList;
import java.util.List;

public class j1228 {
    /**
     * 199. 二叉树的右视图
     * 给定一个二叉树的 根节点 root，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。
     */
    List<Integer> ret = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
        view(root,0);
        return ret;
    }
    private void view(TreeNode root, int index) {
        if(root == null) return;
        if(index == ret.size()) ret.add(root.val);
        view(root.right,index+1);
        view(root.left,index+1);
    }

    /**
     * 114. 二叉树展开为链表
     * 给你二叉树的根结点 root ，请你将它展开为一个单链表：
     *
     * 展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
     * 展开后的单链表应该与二叉树 先序遍历 顺序相同。
     */
    TreeNode r = null;
    public void flatten(TreeNode root) {
        if(root == null) return;
        //先序遍历反过来
        flatten(root.right);
        flatten(root.left);
        root.left = null;
        root.right = r;
        r = root;
    }
}
